package com.kerbores.template.modules;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.nutz.dao.Dao;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Fail;
import org.nutz.mvc.annotation.IocBy;
import org.nutz.mvc.annotation.Modules;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.ioc.provider.ComboIocProvider;

import com.assic.utils.vo.Result;
import com.kerbores.template.listener.OnlineUserCounter;
import com.kerbores.template.modules.common.BaseModule;

@Modules(scanPackage = true)
@IocBy(type = ComboIocProvider.class, args = { "*org.nutz.ioc.loader.json.JsonLoader", "config/config.json", "*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "com.kerbores.template" })
@At("/")
@Fail("json")
public class MainModule extends BaseModule {

	@Inject
	private PropertiesProxy system;
	@Inject
	private PropertiesProxy config;
	@Inject
	private Dao dao;

	/**
	 * 数据库信息
	 * 
	 * @return 当前项目连接的数据的信息
	 */
	@At("dbInfo")
	@Ok("json")
	public Result test() {
		data.clear();
		data.put("db-meta", dao.meta());
		return Result.success().setData(data);
	}

	/**
	 * 系统配置信息
	 * 
	 * @return 通过system.properties配置的系统信息字段
	 */
	@At("sysInfo")
	@Ok("json")
	public Result systemInfo() {
		data.clear();
		data.put("system-info", system);
		return Result.success().setData(data);
	}

	/**
	 * 系统配置信息
	 * 
	 * @return 通过system.properties配置的系统信息字段
	 */
	@At("dbConfig")
	@Ok("json")
	public Result dbConfigInfo() {
		data.clear();
		data.put("db_config", config);
		return Result.success().setData(data);
	}

	/**
	 * 服务器探针
	 * 
	 * @return
	 */
	@At("serverInfo")
	@Ok("json")
	public Result serverState(HttpServletRequest request) {
		// TODO add more info
		data.clear();
		NutMap map = new NutMap();
		map.put("os-name", System.getProperty("os.name"));// 操作系统类型
		map.put("os-arch", System.getProperty("os.arch"));// 操作系统架构
		map.put("os-version", System.getProperty("os.version"));// 操作系统版本
		map.put("java-version", System.getProperty("java.version"));// java版本
		map.put("java-vendor", System.getProperty("java.vendor"));// java提供商
		map.put("user-dir", System.getProperty("user.dir"));// 工作目录
		map.put("web-server", request.getServletContext().getServerInfo());// web容器
		data.put("nutz_loading", request.getServletContext().getAttribute("_NUTZ_LOADING_CONTEXT_"));// nutz加载的系统相关信息
		data.put("server-info", map);
		data.put("author", "Kerbores");// 作者信息
		data.put("author-blog", "http://www.kerbores.com");// 博客
		data.put("properties", System.getProperties());
		data.put("env", System.getenv());
		return Result.success().setData(data);
	}
	/**
	 * 在线用户统计
	 * @param request
	 * @param session
	 * @return
	 */
	@At("onlineUser")
	@Ok("json")
	public Result onlineUser(HttpServletRequest request,HttpSession session) {
		data.clear();
		data.put("count_", OnlineUserCounter.getCount());
		return Result.success().setData(data);
	}
}
